package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import modelo.*;
import conexao.ConnectionFactory;

public class ComentarioDao {
	private Connection conexao;

	public ComentarioDao() throws ClassNotFoundException {

		this.conexao = new ConnectionFactory().getConnection();

	}

	// adicionarComentario
	public boolean adicionar(String titulo, int codigo, String comentario) {
		// buscar o codigo desse livre na tabela livro
		// verificar se o cara leu esse livro na tabela
		// se sim grava o comentario o cod do livro e cod do usuario
		boolean gravado = false;

		String consulta = "select id from livro where titulo='" + titulo + "'";
		PreparedStatement pst;
		int resultDeBusca = 0;
		try {
			pst = this.conexao.prepareStatement(consulta);
			ResultSet resultSet = pst.executeQuery();

			while (resultSet.next()) {
				resultDeBusca = resultSet.getInt("id");
			}
			resultSet.close();
			pst.close();

			System.out.println("codigo desse livro " + resultDeBusca);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if (resultDeBusca != 0) {// existe um livro
		// '"+resultDeBusca+"'
			String consultaSql = "select codusuario from usuariolivro where codlivro='"
					+ resultDeBusca + "'";
			PreparedStatement pst2;
			int codLeitorleuLivro = 0;
			boolean leiotorleuLivro = false;
			try {
				pst2 = this.conexao.prepareStatement(consultaSql);
				ResultSet resultSet = pst2.executeQuery();

				while (resultSet.next()) {
					codLeitorleuLivro = resultSet.getInt("codusuario");
					if (codLeitorleuLivro == codigo) {
						// leitor leu o livro
						leiotorleuLivro = true;
					}
				}
				resultSet.close();
				pst2.close();

				System.out.println("leu o esse livro " + leiotorleuLivro);

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (leiotorleuLivro == true) {
				// adiciona

				String sql = "insert into comentario"
						+ "(codlivro, comentario, codusuario)"
						+ "values(?,?,?)";

				try {

					PreparedStatement stmt = this.conexao.prepareStatement(sql);

					stmt.setInt(1, resultDeBusca);
					stmt.setString(2, comentario);
					stmt.setInt(3, codigo);
					stmt.execute();

					stmt.close();
					conexao.close();

					gravado = true;
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}

		}
		return gravado;
	}

	// listar meus comentarios
	public List<Comentario> listarMeusLivro(int codigoUser) {

		List<Comentario> comentarios = new ArrayList<Comentario>();
		
		String consulta = "select distinct comentario,titulo from livro, comentario where codusuario ='"+codigoUser+"' and livro.id=codlivro";
		
		PreparedStatement pst;
		
		try {
			pst = this.conexao.prepareStatement(consulta);
			ResultSet result = pst.executeQuery();

			while (result.next()) {
				// cria o objeto Livro

				Comentario comentario = new Comentario();
				comentario.setTituloivro(result.getString("titulo"));
				comentario.setComentario(result.getString("comentario"));
			

				// inserindo contato na lista
				comentarios.add(comentario);
			}
			result.close();
			pst.close();
			return comentarios;

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return comentarios;
	}
	
	//listar todos os comentarios:
	public List<Comentario> listarTodosComentarios() {
		String consulta = "select comentario, titulo, nome from comentario, livro, usuario where livro.id=codlivro and codusuario=usuario.id";
		PreparedStatement pst;
		List<Comentario> todosOsComentarios = new ArrayList<Comentario>();

		try {
			pst = this.conexao.prepareStatement(consulta);
			ResultSet result = pst.executeQuery();
			while (result.next()) {
				// cria o objeto Livro

				Comentario comentario = new Comentario();
				comentario.setTituloivro(result.getString("titulo"));
				comentario.setComentario(result.getString("comentario"));
				comentario.setNomeLeitor(result.getString("nome"));
				// inserindo contato na lista
				todosOsComentarios.add(comentario);
			}
			result.close();
			pst.close();
			return todosOsComentarios;

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return todosOsComentarios;
	}

}
